package br.ufpi.domain;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.CollectionOfElements;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

@Entity
public class Pergunta extends Persistente implements Serializable {

    /**
     *
     */
    private static final long serialVersionUID = 325679432733440848L;
    
    private String titulo;
    @Column(columnDefinition = "text")
    private String mensagem;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataEnvio;
    private int status;
    
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "usuarioID", insertable = true, updatable = true)
    @Fetch(FetchMode.JOIN)
    @Cascade(CascadeType.SAVE_UPDATE)
    private Usuario usuario;
    @CollectionOfElements
    
    @OneToMany(mappedBy = "pergunta", fetch = FetchType.LAZY,targetEntity=Resposta.class)
    @Cascade(CascadeType.ALL)
    private List<Resposta> respostas;
    @Column(columnDefinition="text")
    private String comentario;

    public Long getPerguntaID() {
        return super.getId();
    }

    public void setPerguntaID(Long perguntaID) {
        super.setId(perguntaID);
    }

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public String getMensagem() {
        return mensagem;
    }

    public void setMensagem(String mensagem) {
        this.mensagem = mensagem;
    }

    public Date getDataEnvio() {
        return dataEnvio;
    }

    public void setDataEnvio(Date dataEnvio) {
        this.dataEnvio = dataEnvio;
    }

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public void setRespostas(List<Resposta> respostas) {
        this.respostas = respostas;
    }

    public List<Resposta> getRespostas() {
        return respostas;
    }

    public String getComentario() {
        return comentario;
    }

    public void setComentario(String comentario) {
        this.comentario = comentario;
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("Mensagem:\n").append(this.getMensagem()).append("\n");
        builder.append("Pergunta Id:").append(this.getPerguntaID()).append("\n");
        builder.append("Usuario:\n").append(this.getUsuario()).append("\n");
         builder.append("Data de Envio: ").append( this.getDataEnvio());
         
        return builder.toString();
    }
}
